package com.itheima.lambda.test5;

import java.awt.*;

public class CalculatorDemo {
    /*
        1. 首先存在一个接口（Calculator）
        2. 在该接口中存在一个抽象方法（calc），该方法是有参数也有返回值
        3. 在测试类（CalculatorDemo）中存在一个方法（useCalculator）
            方法的的参数是Calculator类型的
            在方法内部调用了Calculator的calc方法
     */
    public static void main(String[] args) {
        //1. 直接给接口进行赋值,充当接口的实现类对象,形成接口多态语法
         Calculator c  = (int a, int b) -> {return a + b;};
         /*
            lambda表达式的省略模式:
                1. 如果接口的形式参数有且只有一个时, 小括号可以省略,同时需要省略掉参数类型
                2. 不管形参有多少个, 参数类型都可以省略不写,但是要省略就得都省略
                3. 如果{}里的代码只有一句,这时候可以省略掉{},省略掉结束的;,如果有return,return也得省略
                        注意: 要省略就都得省略
          */
         useCalculator((a, b) -> a + b);

        CalculatorImpl calc = new CalculatorImpl();
         useCalculator(calc::calc);
    }
    public static void useCalculator(Calculator calculator){
        // Calculator calculator = (int a, int b) -> {return a + b;};
        int result = calculator.calc(10,20);
        System.out.println(result);
    }
}
interface Calculator {
    int calc(int a, int b);
}

class CalculatorImpl implements Calculator{

    @Override
    public int calc(int a, int b) {
        return a * b;
    }
}
